def findKthLargest(nums, k):
    # 初始化最小栈，用于存储当前最大的k个元素
    min_stack = []   
    for num in nums:
        #当栈内元素不足k个时，直接入栈
        if len(min_stack)<k:
            min_stack.append(num)
            #保持栈顶为最小值（入栈后调整栈序）
            i=len(min_stack)-1
            while i>0 and min_stack[i]<min_stack[i-1]:
                min_stack[i], min_stack[i-1] = min_stack[i-1], min_stack[i]
                i -= 1
        #当栈内元素已满，若当前元素大于栈顶（最小的最大元素），则替换栈顶并重新调整
        else:
            if num > min_stack[0]:
                min_stack.pop(0)  #移除栈顶（当前k个最大元素中的最小值）
                min_stack.append(num)
                #重新调整栈，确保栈顶仍是最小值
                i = len(min_stack) - 1
                while i > 0 and min_stack[i] < min_stack[i-1]:
                    min_stack[i], min_stack[i-1] = min_stack[i-1], min_stack[i]
                    i-=1
    #栈顶即为第k个最大元素
    return min_stack[0]

#测试
print(findKthLargest([6,1,2,2,3,4,5],2))  #输出为5
print(findKthLargest([7,3,2,9,12,17,29,57,43,1,11],5))   #输出为12